package org.jsola.hr.service;

import org.jsola.core.Page;
import org.jsola.core.service.IService;
import org.jsola.hr.dao.IEmpAttendanceDAO;
import org.jsola.hr.dto.EmpAttendanceAddDTO;
import org.jsola.hr.dto.EmpAttendanceUpdateDTO;
import org.jsola.hr.entity.EmpAttendanceDO;
import org.jsola.hr.query.EmpAttendanceQuery;
import org.jsola.hr.vo.EmpAttendanceListVO;
import org.jsola.hr.vo.EmpAttendanceVO;
import org.jsola.user.core.TokenUser;

import java.util.List;


/**
 * 员工考勤表
 *
 * @author zhr
 */
public interface IEmpAttendanceService extends IService<IEmpAttendanceDAO, EmpAttendanceDO> {

    /**
     * 新增员工考勤表
     * @param empAttendanceAddDTO 新增员工考勤表DTO
     * @param tokenUser 当前用户
     * @return 员工考勤表详情信息
     */
    EmpAttendanceVO save(EmpAttendanceAddDTO empAttendanceAddDTO, TokenUser tokenUser);

    /**
     * 修改员工考勤表
     * @param empAttendanceUpdateDTO 修改员工考勤表DTO
     * @param tokenUser 当前用户
     * @return 更新数量
     */
    int update(EmpAttendanceUpdateDTO empAttendanceUpdateDTO, TokenUser tokenUser);


    /**
     * 批量删除员工考勤表，物理删除，更新is_valid字段，从回收站删除
     * @param tokenUser 当前用户
     * @param empAttendanceIds 员工考勤表id
     * @return 删除数量
     */
    int deleteByIds(TokenUser tokenUser, Long...empAttendanceIds);

    /**
     * 根据员工考勤表id查找
     * @param empAttendanceId 员工考勤表id
     * @param siteId 所属站点id
     * @return 员工考勤表详情信息
     */
    EmpAttendanceVO selectById(Long empAttendanceId, String siteId);

    /**
     * 查询员工考勤表
     * @param empAttendanceQuery 查询条件
     * @param siteId 所属站点id
     * @return 员工考勤表列表信息
     */
    List<EmpAttendanceListVO> select(EmpAttendanceQuery empAttendanceQuery, String siteId);

    /**
     * 查询员工指定天的考勤工时记录
     *
     * @param yearly        年
     * @param monthly       月
     * @param daily         日
     * @param companyIdList 用工单位id集合
     * @param empIdList     员工id集合
     * @param siteId        所属站点id
     * @return 员工考勤表列表信息
     */
    List<EmpAttendanceDO> selectByEmpIdList(Integer yearly, Integer monthly, Integer daily, List<String> companyIdList,
                                            List<String> empIdList, String siteId);

    /**
    * 查询员工考勤表记录数
    * @param empAttendanceQuery 查询条件
    * @param siteId 所属站点id
    * @return 员工考勤表记录数
    */
    int selectCount(EmpAttendanceQuery empAttendanceQuery, String siteId);

    /**
     * 分页查询员工考勤表
     * @param empAttendanceQuery 查询条件
     * @param siteId 所属站点id
     * @return 员工考勤表列表信息
     */
    Page<EmpAttendanceListVO> selectPage(EmpAttendanceQuery empAttendanceQuery, String siteId);


    /**
     * 根据员工考勤表id查找
     * @param empAttendanceId 员工考勤表id
     * @param siteId 所属站点id
     * @return 员工考勤表
     */
    EmpAttendanceDO selectDOById(Long empAttendanceId, String siteId);

    /**
     * 查询员工考勤表
     * @param empAttendanceQuery 查询条件
     * @param siteId 所属站点id
     * @return 员工考勤表列表
     */
    List<EmpAttendanceDO> selectDO(EmpAttendanceQuery empAttendanceQuery, String siteId);

    /**
     * 查询员工考勤表
     *
     * @param yearly  年份
     * @param monthly 月份
     * @param daily   天
     * @param empId   员工id
     * @param siteId  所属站点id
     * @return 员工考勤表对象
     */
    EmpAttendanceDO selectByEmpId(Integer yearly, Integer monthly, Integer daily, String empId, String siteId);
}


